/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package PanelDeProductos;

import PanelesDeTrabajo.PanelPrincipalProducto;
import com.google.gson.Gson;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author Pato
 */
public class CrearProducto extends JPanel implements ActionListener, MouseListener, KeyListener
{
    private JLabel labelNombre, labelCodigo, labelPrecio;
    private JTextField textoNombre, textoPrecio, textoCodigo;
    private JPanel panelDatos;
    private JButton guardarProducto;
    private Gson gson = new Gson();
    private ArrayList<Producto> productos = new ArrayList<Producto>();
    public boolean productoAgregado;
    
    public CrearProducto()
    {
        this.setLayout(new BorderLayout());
        this.panelDatos = new JPanel();
        this.panelDatos.setLayout(new MigLayout());
        this.labelNombre = new JLabel("Nombre");
        this.labelCodigo = new JLabel("Código");
        this.labelPrecio = new JLabel("Precio $");
        this.textoNombre = new JTextField(20);
        this.textoPrecio = new JTextField(20);
        this.textoCodigo = new JTextField(20);
        
        this.guardarProducto = new JButton("Guardar");
        
        this.panelDatos.add(labelNombre);
        this.panelDatos.add(textoNombre);
        this.panelDatos.add(labelPrecio);
        this.panelDatos.add(textoPrecio,"wrap");
        this.panelDatos.add(labelCodigo);
        this.panelDatos.add(textoCodigo);
        
        this.guardarProducto.addActionListener(this);
        this.textoPrecio.addKeyListener(this);
        this.textoCodigo.addKeyListener(this);
        
        this.panelDatos.add(guardarProducto);
        
        this.add(panelDatos, BorderLayout.CENTER);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        
        Object click = e.getSource();
        boolean nombreVacio = textoNombre.getText().isEmpty();
        boolean CodigoVacio = textoCodigo.getText().isEmpty();
        boolean precioVacio = textoPrecio.getText().isEmpty();
        
        if (click == guardarProducto)
        {
            if(nombreVacio || CodigoVacio || precioVacio)
            {
                JOptionPane.showMessageDialog(this, "Faltan datos,completelos correctamente");
            }
            else
            {
                int precio = Integer.parseInt(textoPrecio.getText());
                String nombre = textoNombre.getText();
                String codigo = textoCodigo.getText();
                
                if (precio > 0)
                {
                    Producto producto = new Producto(nombre, precio, codigo, 0, 0);
                    JOptionPane.showMessageDialog(this, "Producto guardado correctamente");
                    guardarProductoTxt(producto);
                    productoAgregado = true;
                    textoNombre.setText("");
                    textoCodigo.setText("");
                    textoPrecio.setText("");
                }
                else
                {
                    JOptionPane.showMessageDialog(null, "Sólo se permite precio y valoración cuyo valor sea mayor a cero", "Error de entrada",JOptionPane.ERROR_MESSAGE);
                    textoPrecio.setText("");
                }
            }
        }
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        
    }

    @Override
    public void mousePressed(MouseEvent e) {
        
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        
    }

    @Override
    public void mouseExited(MouseEvent e) {
        
    }

    @Override
    public void keyTyped(KeyEvent e) 
    {
        Object comp = e.getComponent();
        int key = (int)e.getKeyChar();
        
        if (comp == textoPrecio)
        {
            if ((key >= 97 && key <= 122) || (key >= 65 && key <= 90))
            {
                e.consume();
                JOptionPane.showMessageDialog(null, "No puede ingresar letras, sólo valores numéricos!", "Error de entrada",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    @Override
    public void keyPressed(KeyEvent e) 
    {
        
    }

    @Override
    public void keyReleased(KeyEvent e) 
    {
        
    }
    
    public void guardarProductoTxt(Producto producto)
    {
        String json = gson.toJson(producto);
        
        try
        {
            FileWriter writer = new FileWriter("C:\\BaseDeDatos\\productos.txt", true);
            writer.write(json);
            writer.write("\n");
            writer.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
